"""
正则表达式：
    概述：
        全称：regular expression，正确的符合特定规则的字符串，就叫：正则表达式
    作用：
        用一些特定的符号组合，来描述字符串的规则，用这个规则来匹配字符串
    适用步骤：
        1：导包
            import re
        2：正则校验
            result = re.match(正则表达式, 字符串, flag=0)
        3：获取匹配到的数据
            result.group()
    正则表达式常用的函数：
        1：用来做校验的，替换的函数
            match()         -》从左到右，逐个字符的匹配，不会跳过某个字符，即：全词匹配
            search()        -》从左到右，依次匹配，即：只要某部分满足条件即可
            compile().sub() -》替换
        2：用来获取数据值的函数
            group()         -》获取匹配到的第一个数据
    注意点：
        1：正则表达式不独属于Python，其他语言也有正则表达式，如：Java、C#、JavaScript等
        2：我们学习正则表达式，主要学习的是：正则表达式的规则，因为正则表达式已经存在很多年，需求（校验邮箱、手机号、身份证等。。。），网上资料到处都是
        3：对于正则表达式，要求：能够看懂别人写的正则表达式，能够基于需求简单修改即可
    正则表达式，常用的规则：
        .           -》任意的一个字符
        \.          -》取消.的特殊用法，就是一个普通的.
        a           -》代表一个字符a
        [abc]       -》代表a、b、c中的任意一个字符
        [^abc]      -》代表除了a、b、c以外的任意一个字符
        [a-z]       -》代表a-z中的任意一个字符
        [A-Z]       -》代表A-Z中的任意一个字符
        [0-9]       -》代表0-9中的任意一个字符
        \d          -》代表：任意的一个整数，例如：0,1,2,3,4,5,6,7,8,9
        \w          -》代表a-zA-Z0-9_中的任意一个字符
        \s          -》代表空格字符
        \D          -》代表：除了整数以外的任意一个字符
        ?           -》数量词，代表：前面的内容出现0次或者1次
        *           -》数量词，代表：前面的内容出现0次或者多次
        +           -》数量词，代表：前面的内容出现1次或者多次
        |           -》代表：或者

    注意事项：
        在PyCharm中编写正则表达式时，是否需要在字符串前加r（表示原始字符串）取决于你使用的Python版本和编码习惯，但根本原因在于Python字符串的转义机制。
    """
# 1. 导入模块
import re

# 案例1：正则表达式匹配字符

# 2：定义正则表达式规则
print(re.match('.it', 'ait')) # 能匹配，返回：的是正则对象

result = re.match('.it', 'ait')
# result2 = re.match('.it', 'aait') # 不能匹配，返回：None
result3 = re.match('.it', 'aitb') # 能匹配，返回的是正则对象

# 案例2：校验字符串是否包含ait，bit，cit，hit，git
result4 = re.match('[abchg]it', 'git')

# 案例3：校验字符串第一个字符，可以是除了a,b,c外任意一个字符，后两个字符必须是hm
result5 = re.match('[^abc]hm', ' hm')

# 案例4：校验数字开头，任意多个字符结束
result6 = re.match('[0-9].*', '123awwd')
result7 = re.search('[0-9].*', '123awwd')
# 使用正则表达式搜索字符串中匹配模式的部分
# 模式 '\d.*' 匹配一个数字后跟任意字符的序列
# 在字符串 'city:1beijing2.shanghai' 中搜索第一个匹配项
# 返回匹配对象，包含匹配的字符串及其位置信息
result8 = re.search('\d.*', 'city:1beijing2.shanghai')

result9 = re.match(r"a", "abc")
# 3：适用group输出匹配的数据
if result9 != None:
    print(result9.group())
# print(result2.group())
# print(result3.group())

